package com.icbc.test;

import org.junit.Test;

public class Arraytest {
	@Test
	public void test1() {
		//创建一个11*11的二维数组
		int[][] aa = new int[11][11];
		//对数组初始化赋值
		aa[1][3] = 1;
		aa[2][4] = 2;
		aa[3][4] = 2;
		aa[4][4] = 2;
		aa[5][4] = 1;
		int f = 0;
		//统计数据aa中的有效数据个数
		for (int[] is : aa) {
			for (int i : is) {
				if (i != 0) {
					f ++;
				}
			}
		}
		//创建一个比有效数据多一个的稀疏数组,第一条需要放置原本数组的行列及有效数
		//创建的原则是原本的数组是二维数组就创建一个
		int[][] bb = new int[++f][3];
		//对稀疏数组的第一个元素赋值
		bb[0] = new int[]{aa.length,aa[0].length,--f};
		//标记
		int ff = 0;
		//循环aa,将aa中不为0的位置及值取出放入稀疏数组bb中
		for (int i = 0; i < aa.length; i++) {
			for (int n = 0; n < aa[i].length; n++) {
				if (aa[i][n] != 0) {
					bb[++ff] = new int[] {i,n,aa[i][n]};
				}
			}
		}
		
		System.out.println("===========还原数组==========");
		//创建一个二维数组,其维度是稀疏数组的第一个元素的0位值和1位值,也就是行和列
		int[][] cc = new int[bb[0][0]][bb[0][1]];
		//再从1开始循环到bb.length结束,将bb中的值放入存储的坐标中
		for (int i = 1; i < bb.length; i++) {
			cc[bb[i][0]][bb[i][1]] = bb[i][2];
		}
		//查看还原的数组
		for (int i = 0; i < cc.length; i++) {
			for (int j = 0; j < cc[i].length; j++) {
				System.out.print(cc[i][j]+",");
			}
			System.out.println();
		}
	}
}
